package com.xgst.land.utils;

public class CRCUtils {
    /**
     * crc校验
     *
     * @return
     */
    public static byte getCrcData(byte[] datas) {
        byte temp = datas[0];
        for (int i = 1; i < datas.length; i++) {
            temp ^= datas[i];
        }
        temp = (byte) ~temp;
        return temp;
    }

    public static byte[] byteAddToByte(byte[] byteParent, byte byteSon) {
        byte[] byteOut;
        if (byteParent == null) {
            byteOut = new byte[]{byteSon};
        } else {
            byteOut = new byte[byteParent.length + 1];
            for (int i = 0; i < byteParent.length; ++i) {
                byteOut[i] = byteParent[i];
            }
            byteOut[byteParent.length] = byteSon;
        }
        return byteOut;
    }

    public static byte[] byteAddToByte(byte[] byteParent, byte[] byteSon) {
        byte[] byteOut;
        if (byteParent == null) {
            byteOut = byteSon;
        } else {
            byteOut = new byte[byteParent.length + byteSon.length];

            int j;
            for (j = 0; j < byteParent.length; ++j) {
                byteOut[j] = byteParent[j];
            }

            for (j = 0; j < byteSon.length; ++j) {
                byteOut[byteParent.length + j] = byteSon[j];
            }
        }

        return byteOut;
    }

    public static String bytes2HexString(byte[] b) {
        String ret = "";
        for (int i = 0; i < b.length; i++) {
            String hex = Integer.toHexString(b[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            ret += hex.toLowerCase();
        }
        return ret;
    }
}
